home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / tex / style / multilet / multilet.sty < prev   
Text File  |  1995-11-25  |  18KB  |  458 lines

  1. %<identification>
  2. \NeedsTeXFormat{LaTeX2e}[1994/12/01]
  3. \ProvidesPackage{MultiLetter}[1995/05/01 Multiple Letter V1.0 from 1995/5/8 by Gundolf Frank]
  4. \newcommand{\PackageName}{MultiLetter}
  5. %<initial code>
  6. \xdef\surnamestr{surname}
  7. \xdef\firstnamestr{firstname}
  8. \xdef\businessstr{business}
  9. \xdef\divisionstr{division}
  10. \xdef\streetstr{street}
  11. \xdef\locationstr{location}
  12. \xdef\telstr{telephone}
  13. \xdef\faxstr{fax}
  14. \xdef\emailstr{email}
  15. \xdef\cosenamestr{cosename}
  16. \xdef\birthdatestr{birthdate}
  17. \xdef\paraerstr{firstsupplement}
  18. \xdef\parazwstr{firstsupplement}
  19. \xdef\contactstr{contact}
  20. \xdef\sexstr{sex}
  21. \newcommand{\adressfound}{One adress found:}
  22. \newcommand{\rightadress}{Is this the right adress?(Yes/No)}
  23. \def\YES{YES}
  24. \def\yes{yes}
  25. \def\YESshort{Y}
  26. \def\yesshort{y}
  27. \def\Yes{Yes}
  28. \newcommand{\mrs}{Mistress}
  29. \def\female{f}
  30. \newcommand{\mr}{Sir}
  31. \def\male{m}
  32. \def\neutrale{n}
  33. \newcommand{\co}{c/o}
  34. \def\contactgood{friendly}
  35. \def\contactbad{formal}
  36. \xdef\openingbon{DLG}
  37. \expandafter\def\csname\openingbon\endcsname{Dear Ladies and Gentlemen}
  38. \xdef\openingbof{DM}
  39. \expandafter\def\csname\openingbof\endcsname{Dear Madam}
  40. \xdef\openingbom{DG}
  41. \expandafter\def\csname\openingbom\endcsname{Dear Gentlemen}
  42. \xdef\openingbf{DMrs}
  43. \expandafter\def\csname\openingbf\endcsname{Dear Mrs.}
  44. \xdef\openingbm{DMr}
  45. \expandafter\def\csname\openingbm\endcsname{Dear Mr.}
  46. \xdef\openingbn{D}
  47. \expandafter\def\csname\openingbn\endcsname{}
  48. \xdef\openinggf{hf}
  49. \expandafter\def\csname\openinggf\endcsname{Hello}
  50. \xdef\openinggm{hm}
  51. \expandafter\def\csname\openinggm\endcsname{Hello}
  52. \xdef\openinggn{h}
  53. \expandafter\def\csname\openinggn\endcsname{Hello}
  54. \xdef\closingb{Yf}
  55. \expandafter\def\csname\closingb\endcsname{Yours faithfully}
  56. \xdef\closingg{Yvt}
  57. \expandafter\def\csname\closingg\endcsname{Yours very truly}
  58. \newcommand{\mesa}{File \adressfilename\space opened.}
  59. \newcommand{\mesb}{File \adressfilename\space closed.}
  60. \newcommand{\errormesa}{No search option is given!}
  61. \newcommand{\errorhelpa}{At \string\multiletter[options]{search options} you must define a search option.}
  62. \newcommand{\errorhelpaa}{At \string\searchadress[options]{search options} you must define a search option.}
  63. \newcommand{\errormesb}{File \adressfilename\space not found!}
  64. \newcommand{\errorhelpb}{File *.adr with the complete adresses is missing.}
  65. \newcommand{\warninga}{No adress found!}
  66. \newcommand{\warnhelpa}{Please control the spelling in your adressfile\MessageBreak and in your letter.}
  67.  
  68. %<declaration of options>
  69. \DeclareOption{german}{\xdef\surnamestr{Nachname}
  70.                        \xdef\firstnamestr{Vorname}
  71.                        \xdef\businessstr{Firma}
  72.                        \xdef\divisionstr{Abteilung}
  73.                        \xdef\streetstr{Straβe}
  74.                        \xdef\locationstr{Ort}
  75.                        \xdef\telstr{Telefon}
  76.                        \xdef\faxstr{Fax}
  77.                        \xdef\emailstr{E-Mail}
  78.                        \xdef\cosenamestr{Cosename}
  79.                        \xdef\birthdatestr{Geburtsdatum}
  80.                        \xdef\paraerstr{ersterZusatz}
  81.                        \xdef\parazwstr{zweiterZusatz}
  82.                        \xdef\contactstr{Kontakt}
  83.                        \xdef\sexstr{Geschlecht}
  84.                        \renewcommand{\adressfound}{Adresse gefunden:}
  85.                        \renewcommand{\rightadress}{Ist dies die richtige Adresse?(Ja/Nein)}
  86.                        \def\YES{JA}
  87.                        \def\yes{ja}
  88.                        \def\YESshort{J}
  89.                        \def\Yes{Ja}
  90.                        \def\yesshort{j}
  91.                        \renewcommand{\mrs}{Frau}
  92.                        \def\female{w}
  93.                        \renewcommand{\mr}{Herrn}
  94.                        \def\male{m}
  95.                        \def\neutrale{n}
  96.                        \renewcommand{\co}{z.H.}
  97.                        \def\contactgood{herzlich}
  98.                        \def\contactbad{formal}
  99.                        \xdef\openingbon{sgDH}
  100.                        \expandafter\def\csname\openingbon\endcsname{Sehr geehrte Damen und Herren}
  101.                        \xdef\openingbof{sgDn}
  102.                        \expandafter\def\csname\openingbof\endcsname{Sehr geehrte Damen}
  103.                        \xdef\openingbom{sgHn}
  104.                        \expandafter\def\csname\openingbom\endcsname{Sehr geehrte Herren}
  105.                        \xdef\openingbf{sgF}
  106.                        \expandafter\def\csname\openingbf\endcsname{Sehr geehrte}
  107.                        \xdef\openingbm{sgH}
  108.                        \expandafter\def\csname\openingbm\endcsname{Sehr geehrter}
  109.                        \xdef\openingbn{sg}
  110.                        \expandafter\def\csname\openingbn\endcsname{Sehr geehrtes}
  111.                        \xdef\openinggf{le}
  112.                        \expandafter\def\csname\openinggf\endcsname{Liebe}
  113.                        \xdef\openinggm{lr}
  114.                        \expandafter\def\csname\openinggm\endcsname{Lieber}
  115.                        \xdef\openinggn{ls}
  116.                        \expandafter\def\csname\openinggn\endcsname{Liebes}
  117.                        \xdef\closingb{mfg}
  118.                        \expandafter\def\csname\closingb\endcsname{Mit freundlichen Grüβen}
  119.                        \xdef\closingg{mhg}
  120.                        \expandafter\def\csname\closingg\endcsname{Mit herzlichen Grüβen}
  121.                        \renewcommand{\mesa}{Datei \adressfilename\space geöffnet.}
  122.                        \renewcommand{\mesb}{Datei \adressfilename\space geschlossen.}
  123.                        \renewcommand{\errormesa}{Es wurde kein Suchkriterium angegeben!}
  124.                        \renewcommand{\errorhelpa}{Bei \string\multiletter[Optionen]{suchkriterium} musz ein Suchkriterium angegeben\MessageBreak werden.}
  125.                        \renewcommand{\errorhelpaa}{Bei \string\searchadress[Optionen]{suchkriterium} musz ein Suchkriterium angegeben\MessageBreak werden.}
  126.                        \renewcommand{\errormesb}{Datei \adressfilename\space nicht gefunden!}
  127.                        \renewcommand{\errorhelpb}{Datei mit der Endung 'adr' mit der kompletten Adressenliste wurde nicht\MessageBreak gefunden.}
  128.                        \renewcommand{\warninga}{Keine passende Adresse gefunden!}
  129.                        \renewcommand{\warnhelpa}{Bitte kontrollieren Sie die Schreibweisen in der\MessageBreak Adressenliste und im Brief.}
  130.                        \def\Adresse{\address}
  131.                       }
  132. \DeclareOption*{\InputIfExists{\CurrentOption.STY}{}{}}
  133. \ProcessOptions
  134.  
  135. %<package loading>
  136. \RequirePackage{ifthen}
  137.  
  138. %<main code>
  139. %Here you can change the filename, where your adresses are written in.
  140. \providecommand{\adressfilename}{Brief.ADR}
  141.  
  142. \expandafter\def\csname\surnamestr\endcsname{\surname}
  143. \expandafter\def\csname\firstnamestr\endcsname{\firstname}
  144. \expandafter\def\csname\businessstr\endcsname{\business}
  145. \expandafter\def\csname\divisionstr\endcsname{\division}
  146. \expandafter\def\csname\streetstr\endcsname{\street}
  147. \expandafter\def\csname\locationstr\endcsname{\location}
  148. \expandafter\def\csname\telstr\endcsname{\tel}
  149. \expandafter\def\csname\faxstr\endcsname{\fax}
  150. \expandafter\def\csname\emailstr\endcsname{\emailname}
  151. \expandafter\def\csname\cosenamestr\endcsname{\cosename}
  152. \expandafter\def\csname\birthdatestr\endcsname{\birthdate}
  153. \expandafter\def\csname\paraerstr\endcsname{\paraer}
  154. \expandafter\def\csname\parazwstr\endcsname{\parazw}
  155. \expandafter\def\csname\contactstr\endcsname{\contact}
  156. \expandafter\def\csname\sexstr\endcsname{\sex}
  157.  
  158. \newboolean{mletterboo}
  159. \setboolean{mletterboo}{false}
  160. \newboolean{noteofile}
  161. \setboolean{noteofile}{false}
  162. \newboolean{listadress}
  163. \setboolean{listadress}{true}
  164.  
  165. \DeclareRobustCommand{\searchadress}[2][empty]{%
  166.    \let\crlf=\\%
  167.    \let\\=\space%
  168.    \def\option{#1}%
  169.    \def\searchoption{#2}%
  170.    \setboolean{noteofile}{true}%
  171.    \ifthenelse{\equal{\searchoption}{}}%
  172.     {\ifthenelse{\boolean{mletterboo}}%
  173.        {\PackageError{\PackageName}{\errormesa}{\errorhelpa}}%
  174.        {\PackageError{\PackageName}{\errormesa}{\errorhelpaa}}}{}%
  175.    \ifthenelse{\boolean{mletterboo}}%
  176.      {}%
  177.      {\IfFileExists{\adressfilename}%
  178.         {\openin7=\adressfilename%
  179.          \typeout{Package \PackageName\space Info: \mesa}}%
  180.         {\setboolean{noteofile}{false}%
  181.          \PackageError{\PackageName}{\errormesb}{\errorhelpb}}}%
  182.    \ifthenelse{\equal{\option}{empty} \or%
  183.                \equal{\option}{\surnamestr}}%
  184.      {\def\option{surname}}{}%
  185.    \ifthenelse{\equal{\option}{\firstnamestr}}%
  186.      {\def\option{firstname}}{}%
  187.    \ifthenelse{\equal{\option}{\businessstr}}%
  188.      {\def\option{business}}{}%
  189.    \ifthenelse{\equal{\option}{\divisionstr}}%
  190.      {\def\option{division}}{}%
  191.    \ifthenelse{\equal{\option}{\streetstr}}%
  192.      {\def\option{street}}{}%
  193.    \ifthenelse{\equal{\option}{\locationstr}}%
  194.      {\def\option{location}}{}%
  195.    \ifthenelse{\equal{\option}{\telstr}}%
  196.      {\def\option{tel}}{}%
  197.    \ifthenelse{\equal{\option}{\faxstr}}%
  198.      {\def\option{fax}}{}%
  199.    \ifthenelse{\equal{\option}{\emailstr}}%
  200.      {\def\option{email}}{}%
  201.    \ifthenelse{\equal{\option}{\birthdatestr}}%
  202.      {\def\option{birthdate}}{}%
  203.    \ifthenelse{\equal{\option}{\cosenamestr}}%
  204.      {\def\option{cosename}}{}%
  205.    \ifthenelse{\equal{\option}{\paraerstr}}%
  206.      {\def\option{paraer}}{}%
  207.    \ifthenelse{\equal{\option}{\parazwstr}}%
  208.      {\def\option{parazw}}{}%
  209.    \ifthenelse{\equal{\option}{\sexstr}}%
  210.      {\def\option{sex}}{}%
  211.    \ifthenelse{\equal{\option}{\contactstr}}%
  212.      {\def\option{contact}}{}%
  213.    \def\test{---}%
  214.    \whiledo{\boolean{noteofile}}%
  215.     {\def\liofchar{}%
  216.      \endlinechar=-1%
  217.      \read7 to\liofchar%
  218.      \endlinechar=`\^^M%
  219.      \ifx\liofchar\test%
  220.        \endlinechar=-1%
  221.        \read7 to\surname%
  222.        \read7 to\firstname%
  223.        \read7 to\business%
  224.        \read7 to\division%
  225.        \read7 to\street%
  226.        \read7 to\location%
  227.        \read7 to\tel%
  228.        \read7 to\fax%
  229.        \read7 to\email%
  230.        \read7 to\cosename%
  231.        \ifthenelse{\equal{\cosename}{}}%
  232.          {\def\cosename{\firstname}}%
  233.          {}%
  234.        \read7 to\birthdate%
  235.        \read7 to\paraer%
  236.        \read7 to\parazw%
  237.        \read7 to\sex%
  238.        \read7 to\contact%
  239.        \endlinechar=`\^^M%
  240.        \ifthenelse{\equal{\searchoption}{\csname\option\endcsname}}%
  241.         {\setboolean{noteofile}{false}%
  242.          \typeout{\adressfound}%
  243.          \ifthenelse{\equal{\business}{}}%
  244.           {}%
  245.           {\typeout{\business}}%
  246.          \ifthenelse{\equal{\division}{}}%
  247.           {}%
  248.           {\typeout{\divisionstr\space\division}}%
  249.          \typeout{\firstname\space\surname}%
  250.          \typeout{\street}%
  251.          \typeout{\location}%
  252.          \typeout{}%
  253.          \ifthenelse{\boolean{mletterboo}}%
  254.           {}%
  255.           {\endlinechar=-1%
  256.            \typein[\choose]{\rightadress}%
  257.            \endlinechar=`\^^M%
  258.            \setboolean{noteofile}{true}%
  259.            \ifthenelse{\equal{\yes}{\choose}}%
  260.              {\setboolean{noteofile}{false}}{}%
  261.            \ifthenelse{\equal{\yesshort}{\choose}}%
  262.              {\setboolean{noteofile}{false}}{}%
  263.            \ifthenelse{\equal{\YES}{\choose}}%
  264.              {\setboolean{noteofile}{false}}{}%
  265.            \ifthenelse{\equal{\YESshort}{\choose}}%
  266.              {\setboolean{noteofile}{false}}{}%
  267.            \ifthenelse{\equal{\Yes}{\choose}}%
  268.              {\setboolean{noteofile}{false}}{}%
  269.           }%
  270.          \ifthenelse{\boolean{noteofile}}% 
  271.           {}%
  272.           {\def\option{found}%
  273.            \def\address{%
  274.             \ifx\business\empty%
  275.               \ifx\sex\female%
  276.                 \mrs%
  277.                \else%
  278.                 \mr%
  279.               \fi%
  280.               \\%
  281.               \firstname\space\surname\\%
  282.              \else
  283.               \business\\%
  284.               \ifx\division\empty%
  285.                \else%
  286.                \divisionstr\space\division\\%
  287.               \fi%
  288.               \ifx\sex\neutrale%
  289.                 \underline{\space}\\%
  290.                \else
  291.                 \co\space%
  292.                \ifx\sex\female%
  293.                   \mrs%
  294.                  \else
  295.                   \mr%
  296.                 \fi
  297.                 \space\surname\\%
  298.               \fi
  299.             \fi
  300.             \street\\%
  301.             \location}%
  302.            \def\openingtext{\csname\openingbon\endcsname,}%
  303.            \ifx\contact\contactgood%
  304.              \ifx\sex\male%
  305.                \def\openingtext{\csname\openinggm\endcsname\space\cosename,}
  306.              \fi
  307.              \ifx\sex\female%
  308.                \def\openingtext{\csname\openinggf\endcsname\space\cosename,}%
  309.              \fi%
  310.              \ifx\sex\neutrale%
  311.                \def\openingtext{\csname\openinggn\endcsname\space\cosename,}%
  312.              \fi%
  313.            \fi%
  314.            \ifx\contact\contactbad%
  315.              \ifx\sex\male%
  316.                \def\openingtext{\csname\openingbm\endcsname\space\surname,}%
  317.              \fi
  318.              \ifx\sex\female%
  319.                \def\openingtext{\csname\openingbf\endcsname\space\surname,}%
  320.              \fi
  321.              \ifx\sex\neutrale%
  322.                \def\openingtext{\csname\openingbon\endcsname,}%
  323.              \fi
  324.            \fi
  325.            \def\closingtext{\csname\closingb\endcsname}%
  326.            \ifx\contact\contactgood%
  327.              \def\closingtext{\csname\closingg\endcsname}%
  328.            \fi
  329.            \ifx\contact\contactbad%
  330.             \def\closingtext{\csname\closingb\endcsname}%
  331.            \fi
  332.           }}{}%
  333.      \fi%
  334.      \ifeof7%
  335.        \setboolean{noteofile}{false}%
  336.      \fi}%
  337.    \let\\=\crlf%
  338.    \ifthenelse{\boolean{mletterboo}}%
  339.      {\ifeof7% 
  340.         \closein7%
  341.         \setboolean{mletterboo}{false}%
  342.         \typeout{Package \PackageName\space Info: \mesb}%
  343.         \typeout{}%
  344.         \PackageWarningNoLine{\PackageName}{\warninga}%
  345.         \PackageInfo{\PackageName}{\warnhelpa}%
  346.         \ifthenelse{\boolean{listadress}}%
  347.            {\address}{}%
  348.       \fi}%
  349.      {\closein7%
  350.       \typeout{Package \PackageName\space Info: \mesb}%
  351.       \typeout{}%
  352.       \ifthenelse{\equal{\option}{found}}%
  353.        {\ifthenelse{\boolean{listadress}}%
  354.          {\address}{}}%
  355.        {\PackageWarningNoLine{\PackageName}{\warninga}%
  356.         \PackageInfo{\PackageName}{\warnhelpa}}%
  357.         \ifthenelse{\boolean{listadress}}%
  358.          {#2}{}}%
  359. }%
  360.  
  361. \def\print@mletter{\catcode`\\=0%
  362.                    \catcode`\ =10%
  363.                    \catcode`\%=14%
  364.                    \catcode`\^^@=9%
  365.                    \catcode`\^^?=15%
  366.                    \catcode`\^^M=5%
  367.                    \catcode`\{=1%
  368.                    \catcode`\}=2%
  369.                    \catcode`\/=12%
  370.                    \catcode`\|=12%
  371.                    \catcode`\<=12%
  372.                    \catcode`\>=12%
  373.                    \IfFileExists{\adressfilename}%
  374.                      {\openin7=\adressfilename%
  375.                       \setboolean{mletterboo}{true}%
  376.                       \setboolean{noteofile}{true}%
  377.                       \setboolean{listadress}{false}%
  378.                       \def\address{empty}%
  379.                       \typeout{Package \PackageName\space Info: \mesa}}%
  380.                      {\PackageError{\PackageName}{\errormesb}{\errorhelpb}}%
  381.                    \whiledo{\boolean{mletterboo}}%
  382.                     {\searchadress[\fpar]{\spar}%
  383.                      \ifthenelse{\boolean{mletterboo}}%
  384.                        {\input{\jobname.MLT}}%
  385.                        {}%
  386.                     }%
  387.                   }%
  388. \begingroup%
  389. \catcode`\@=11%
  390. \gdef\multiletter{\@ifnextchar [{\multi@letter}{\multi@letter[empty]}}%
  391. \gdef\multi@letter[#1]#2{%
  392.    \gdef\fpar{#1}%
  393.    \gdef\spar{#2}%
  394.    \@mletter}%
  395. \catcode`\^^M\active%
  396. \catcode`\^^L\active\let^^L\relax%
  397. \catcode`\^^I\active%
  398. \gdef\@mletter{%
  399.   \chardef\mletter@file15 %
  400.   \ch@ck7\mletter@file\write%
  401.   \typeout{}%
  402.   \typeout{Writing File `\jobname.MLT'}%
  403.   \immediate\openout\mletter@file=\jobname.MLT\relax%
  404.   \if@tempswa%
  405.     \immediate\write\mletter@file{%
  406.       \@percentchar\@percentchar\space LaTeX2e file `\jobname.MLT'^^J%
  407.       \@percentchar\@percentchar\space  generated by the %
  408.          `Multiletter' environment^^J%
  409.       \@percentchar\@percentchar\space from source `\jobname' on %
  410.          \number\year/\number\month/\number\day.^^J%
  411.       \@percentchar\@percentchar}\relax%
  412.   \fi%
  413.   \let\do\@makeother\dospecials%
  414.   \@vrend%
  415.   \catcode`\^^L\active%
  416.   \let\L\@undefined%
  417.   \def^^L{\@ifundefined L^^J^^J^^J}%
  418.   \catcode`\^^I\active%
  419.   \let\I\@undefined%
  420.   \def^^I{\@ifundefined I\space\space}%
  421.   \catcode`\^^M\active%
  422.   \def^^M##1^^M%
  423.     {\def\test@b{##1}%
  424.      \catcode`\ =9%
  425.      \ifx\test@b\test@a%
  426.        \catcode`\ =10%
  427.        \expandafter\end\expandafter{\@currenvir}%
  428.      \else%
  429.        \catcode`\ =10%
  430.        \immediate\write\mletter@file{##1}\relax\expandafter^^M%
  431.      \fi}}%
  432. \endgroup%
  433. \begingroup
  434. \catcode`\@=11
  435. \catcode`/=0
  436. \catcode`<=\catcode`{
  437. \catcode`>=\catcode`}
  438. \catcode`|=\catcode`\%
  439. /catcode`/\=12
  440. /catcode`/{=12
  441. /catcode`/}=12
  442. /catcode`/%=12
  443. /gdef/@percentchar<%>
  444. /gdef/@vrend</edef/test@a<\end{/@currenvir}>>
  445. /gdef/endmultiletter<|
  446.   /immediate/closeout/mletter@file/relax
  447.   /ifx/L/@undefined/else
  448.     /typeout<Form Feed has been converted to Blank Line>|
  449.   /fi
  450.   /ifx/I/@undefined/else
  451.     /typeout<Tab has been converted to Space>|
  452.   /fi
  453.   /immediate/write/@unused<>/relax|
  454.   /print@mletter>
  455. /endgroup
  456.  
  457. \endinput
  458.